Linux 环境下 InfiniBand 组网认知

对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》

写在前面


  • 工作中遇到,简单整理
  • 博文内容涉及 InfiniBand 简单认知,以及使用 ib_send_*iperf3 对 InfiniBand 组网进行测试 Demo
  • 理解不足小伙伴帮忙指正

对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》


简单介绍

InfiniBand 是什么?

InfiniBand (或则直接叫IB)是一种高性能计算和数据中心网络技术。它提供了一种低延迟、高带宽和可靠性的连接方式,用于连接服务器、存储设备和其他计算资源。InfiniBand的设计目标是为数据中心和企业级网络提供更好的性能和可扩展性。

采用 InfiniBand 连接的设备可以通过RDMA(Remote Direct Memory Access)技术实现零拷贝数据传输,在减少CPU负载的同时提高了应用程序的性能。此外,InfiniBand 还提供了诸如缓冲区管理QoS(Quality of Service)虚拟化等特性,以支持高效的数据传输和资源管理。

如何理解 InfiniBand?

用通俗的话讲,把以太网想象成一个快递包裹分发网络(路由寻址);而IB网络,则可以想象成一个地铁轨道交通网络

以太网

以太网 类似一个快递包裹分发网络,这个网络中所有的快递中转站(交换机/路由器)都是独立运作,根据一套公认的规则(网络协议)进行分拣并投递对。

每个中转站(网络设备)设备来说,第一,它可能看到发送到任何地址的包裹(分布式,异构的),所以它收到每个包都要算算该怎么发(这就要花时间,引入延迟),如果业务太繁忙,收不下来了,就间断粗暴的把包裹丢弃(丢包)。

IB网络

IB网络 你可以想象成一个地铁轨道交通网络。这是因为IB的底层是基于VCT(Virtual Cut Through)技术。因此IB的一个数据包,与以太网的包裹相比更像是一列火车(每节车厢是个叫做flit的数据单元)

为什么这么类比?不像以太网在转发时必须先在入队列上包裹收下来,然后丢到出队列等待再发出去。IB网络是直接然后再在过每个中转站的时候,车屁股还没进站,车头已经向下一站出发了!所以它的延迟才能做到这么低。 并且,也如同轨道交通网络一样,这些中转站(交换机)之所以能做到这么快的让车辆通过,是因为目的地车站是确定且有限的(IB网络的地址数量,称为LID号,是有限的,地址空间65535个),所有列车怎么走在网络开始运行前都提前决定好了(路由表提前算好),所以在每个中转站的扳道工只需要简单查一下线路图(实现就是个普通的数组查询),“到10号站的车该走n2出口”就行了,而不像快递网络一样去查“xxx区xxx号xxx大厦”该怎么走(实现中用哈希或者CAM)

所以说 InfiniBand 是 一种通信技术,和我们常讲的 ISO 参考模型没有直接关系,InfiniBand 本身并不直接对应于 OSI(Open System Interconnection)参考模型 的某一特定层,InfiniBand 作为一种网络通信技术,其实现和功能跨越了OSI参考模型的多个层次。

通信机制上,InfiniBand 使用软件定义的方法建立大规模且流量纯净的二层网络,避免了以太网中的ARP广播机制可能带来的广播风暴问题和组网限制。InfiniBand 的链路层提供有序数据包传递和基于信用的流量控制,使CPU占用可忽略不计。而以太网则使用以网络设备为中心的方法建立路由,并使用软件控制数据的传输,这可能需要高性能CPU进行数据包的处理

应用层面InfiniBand 能够绕过操作系统内核,创建应用程序间通信的直接通道,为应用程序提供延迟极低的消息传输服务。相比之下,传统以太网应用架构中,应用程序并不直接访问网络。

换句话我们可以讲,从上到下在链路层开始,IB 组网和 IP 组网就不同了。我们知道常用的软件都是基于 以太网的,那么

使用 IB 组网 是如何传递 IP 数据包?

使用InfiniBand(IB)组网来传递IP数据包涉及到一个特殊的处理过程,因为 InfiniBand 本身并不是设计用来直接传输IP数据包的。然而,通过一些技术和工具,我们可以在InfiniBand网络上传输IP数据包。

一种常见的方法是使用IP over InfiniBand(IPoIB)技术。IPoIB是一种在 InfiniBand 网络上封装和传输IP数据包的方法。它将IP数据包封装在InfiniBand的数据包中(类似 IPIP 等一些隧道协议),以便在InfiniBand 网络上传输。在接收端,IPoIB再将数据包解封,还原成原始的IP数据包。

使用IPoIB技术,可以在InfiniBand网络上实现IP数据包的传输,从而利用InfiniBand的高速和低延迟特性。这对于需要高性能网络连接的应用程序来说是非常有用的,特别是在数据中心和高性能计算环境中。

需要注意的是,使用IPoIB技术可能需要进行一些额外的配置和设置。可能需要配置InfiniBand子网管理器(Subnet Manager)和IPoIB驱动程序,以确保网络正确连接和IP数据包能够正确传输。此外,您还需要确保网络设备和操作系统支持IPoIB技术。

名词的解释

在 InfiniBand 组网中,涉及了一些专有名词和术语,以下是这些名词的解释:

  • InfiniBand适配器(HCA)(网卡): InfiniBand适配器是连接InfiniBand网络的设备,负责将计算机系统中的数据和控制信息转换为InfiniBand协议格式。
  • InfiniBand子网管理器(SM)(InfiniBand 交换机): InfiniBand子网管理器是一个特殊的InfiniBand适配器,用于管理整个InfiniBand网络。它负责配置和维护InfiniBand网络的路由表、端口状态和链路速率等信息。
  • 连接建立(connect): 连接建立是指在两个节点之间建立通信连接的过程。在这个过程中,两个InfiniBand适配器交换相应的信息并确定通信能力和资源。
  • InfiniBand数据报(IB包): InfiniBand数据报是在InfiniBand网络上传输数据的基本单位。它包括源和目标地址、传输的数据、以及其他元数据。
  • Remote Direct Memory Access(RDMA): RDMA是一种在InfiniBand网络上实现零拷贝数据传输的技术。它允许数据直接从内存复制到另一个计算机系统的内存,而无需通过CPU进行中间处理。
  • 链路速率(link speed): 链路速率是指InfiniBand网络中物理链路上的最大传输速率。它通常以Gbps(千兆比特每秒)为单位表示。
  • 断开连接(disconnect): 断开连接是指在两个节点之间结束通信连接的过程,使得每个适配器和端口可以重新分配给其他节点。

常用命令

当前测试系统

1
2
3
4
5
6
7
8
9
10
11
12
root@liruilongs.github.io:~# hostnamectl
Static hostname: liruilongs.github.io
Icon name: computer-desktop
Chassis: desktop
Machine ID: 9b970dc65020411ab022b51d5d17e883
Boot ID: 835e69ea4f4d4384aa317e7875537b44
Operating System: Ubuntu 22.04.4 LTS
Kernel: Linux 5.15.0-105-generic
Architecture: x86-64
Hardware Vendor: Supermicro
Hardware Model: X12DAi-N6
root@liruilongs.github.io:~#

确认下 IB 网卡硬件设备是否正常识别

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
root@liruilongs.github.io:~# lshw -c network | grep -i -C 3 ibs
vendor: Mellanox Technologies
physical id: 0
bus info: pci@0000:b1:00.0
logical name: ibs106f0
version: 00
serial: 00:00:10:87:fe:80:00:00:00:00:00:00:7c:fe:00:00:00:00:00:00
width: 64 bits
--
vendor: Mellanox Technologies
physical id: 0.1
bus info: pci@0000:b1:00.1
logical name: ibs106f1
version: 00
serial: 00:00:18:87:fe:80:00:00:00:00:00:00:7c:fe:00:00:00:00:00:00
width: 64 bits
root@liruilongs.github.io:~#

ibstat

ibstat 命令用于查看 IB 网卡状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@toolbox ~]# ibstat
CA 'mlx4_0'
CA type: MT4099
Number of ports: 2
Firmware version: 2.42.5000
Hardware version: 1
Node GUID: 0x0002c903003fc5e0
System image GUID: 0x0002c903003fc5e3
Port 1:
State: Active
Physical state: LinkUp
Rate: 40
Base lid: 45
LMC: 0
SM lid: 1
Capability mask: 0x02514868
Port GUID: 0x0002c903003fc5e1
Link layer: InfiniBand
Port 2:
State: Active
Physical state: LinkUp
Rate: 40
Base lid: 46
LMC: 0
SM lid: 1
Capability mask: 0x02514868
Port GUID: 0x0002c903003fc5e2
Link layer: InfiniBand
[root@toolbox ~]#
  • CA类型: HCA型号为 MT4099。
  • 端口数量: HCA有2个端口。
  • 固件版本: HCA固件版本为2.42.5000。
  • 硬件版本: HCA硬件版本为1。
  • 节点GUID: 此HCA的节点全局唯一标识符(GUID)为0x0002c903003fc5e0。
  • 系统镜像GUID: 此HCA的系统镜像GUID为0x0002c903003fc5e3。
  • 端口1: 这提供了有关HCA端口1的信息:
  • 状态: 端口1的状态为“活动”。
  • 物理状态: 端口1的物理状态为“LinkUp”。
  • 速率: 端口1的数据传输速率为40 Gbps。
  • 基本LID: 端口1的基本LID(本地标识符)为45。
  • LMC: 端口1的LMC(LID掩码计数)为0,表示仅使用基本LID。
  • SM LID: 端口1的SM LID(子网管理器LID)为1。
  • 能力掩码: 端口1的能力掩码为0x02514868。
  • 端口GUID: 端口1的端口GUID为0x0002c903003fc5e1。
  • 链接层: 端口1使用的链接层协议是InfiniBand。

ibdiagnet

ibdiagnet 检测当前集群下物理链路的健康情况

1
2
3
4
5
6
7
8
9
10
root@liruilongs.github.io:~# ibdiagnet
Loading IBDIAGNET from: /usr/lib/x86_64-linux-gnu/ibdiagnet1.5.7
-W- Topology file is not specified.
Reports regarding cluster links will use direct routes.
Loading IBDM from: /usr/lib/x86_64-linux-gnu/ibdm1.5.7
-W- A few ports of local device are up.
Since port-num was not specified (-p option), port 1 of device 1 will be
used as the local port.
ibwarn: [7757] get_abi_version: can't read ABI version from /sys/class/infiniband_mad/abi_version (No such file or directory): is ib_umad module loaded?
-E- Fail to ibcr_bind.

提示有内核模块没有加载,所以需要重新加载一下模块

1
2
3
4
5
6
7
8
9
root@liruilongs.github.io:~# lsmod | grep ib_umad
root@liruilongs.github.io:~# modprobe ib
ib700wdt ib_ipoib ib_isert ibmasm ibm-cffps ibm_rtl ib_qib ib_srpt
ib_cm ib_iser ibmaem ibmasr ibmpex ib_mthca ib_srp ib_umad
root@liruilongs.github.io:~# modprobe ib_umad
root@liruilongs.github.io:~# lsmod | grep ib_umad
ib_umad 40960 0
ib_core 393216 3 ib_umad,ib_uverbs,mlx5_ib
root@liruilongs.github.io:~#

加载完成再次运行命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
root@liruilongs.github.io:~# ibdiagnet
Loading IBDIAGNET from: /usr/lib/x86_64-linux-gnu/ibdiagnet1.5.7
-W- Topology file is not specified.
Reports regarding cluster links will use direct routes.
Loading IBDM from: /usr/lib/x86_64-linux-gnu/ibdm1.5.7
-W- A few ports of local device are up.
Since port-num was not specified (-p option), port 1 of device 1 will be
used as the local port.
-I- Discovering ... 49 nodes (4 Switches & 45 CA-s) discovered.


-I---------------------------------------------------
-I- Bad Guids/LIDs Info
-I---------------------------------------------------
-I- No bad Guids were found

...........................
-I- IPoIB Subnets Check
-I---------------------------------------------------
-I- Subnet: IPv4 PKey:0x7fff QKey:0x00000b1b MTU:2048Byte rate:10Gbps SL:0x00
-W- Suboptimal rate for group. Lowest member rate:40Gbps > group-rate:10Gbps

-I---------------------------------------------------
-I- Bad Links Info
-I- No bad link were found
-I---------------------------------------------------
----------------------------------------------------------------
-I- Stages Status Report:
STAGE Errors Warnings
Bad GUIDs/LIDs Check 0 0
Link State Active Check 0 0
General Devices Info Report 0 0
Performance Counters Report 0 0
Partitions Check 0 0
IPoIB Subnets Check 0 1

Please see /var/cache/ibutils/ibdiagnet.log for complete log
----------------------------------------------------------------

-I- Done. Run time was 5 seconds.
root@liruilongs.github.io:~#

ibnetdiscover -p: 扫描网络并显示每个端口的 LID、GUID、机器名和端口号等信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@toolbox ~]# ibnetdiscover
#
# Topology file: generated on Fri Apr 28 11:09:33 2023
#
# Initiated from node 0002c903003fc5e0 port 0002c903003fc5e1

vendid=0x2c9
devid=0xcb20
sysimgguid=0x248a070300e43740
switchguid=0x248a070300e43740(248a070300e43740)
Switch 36 "S-248a070300e43740" # "MF0;sw02:MSB7700/U1" enhanced port 0 lid 1 lmc 0
[1] "H-0002c9030039d940"[2](2c9030039d942) # "MT25408 ConnectX Mellanox Technologies" lid 50 4xQDR
[2] "H-0002c903003638a0"[2](2c903003638a2) # "MT25408 ConnectX Mellanox Technologies" lid 48 4xQDR
....................................
[30] "H-0002c903003f0f70"[2](2c903003f0f72) # "MT25408 ConnectX Mellanox Technologies" lid 16 4xQDR
[35] "S-506b4b03005ec3a0"[35] # "MF0;sw01:MSB7700/U1" lid 2 4xEDR
[36] "S-506b4b03005ec3a0"[36] # "MF0;sw01:MSB7700/U1" lid 2 4xEDR

vendid=0x2c9
devid=0xcb20
sysimgguid=0x506b4b03005ec3a0
switchguid=0x506b4b03005ec3a0(506b4b03005ec3a0)
Switch 36 "S-506b4b03005ec3a0" # "MF0;sw01:MSB7700/U1" enhanced port 0 lid 2 lmc 0
[1] "H-0002c9030039d940"[1](2c9030039d941) # "MT25408 ConnectX Mellanox Technologies" lid 49 4xQDR
[2] "H-0002c903003638a0"[1](2c903003638a1) # "MT25408 ConnectX Mellanox Technologies" lid 47 4xQDR
[3] "H-0002c903004214f0"[1](2c903004214f1) # "MT25408 ConnectX Mellanox Technologies" lid 43 4xQDR
........................
[27] "H-0002c90300363800"[1](2c90300363801) # "MT25408 ConnectX Mellanox Technologies" lid 11 4xQDR
[28] "H-0002c9030040e440"[1](2c9030040e441) # "MT25408 ConnectX Mellanox Technologies" lid 13 4xQDR
[29] "H-0002c903003fb180"[1](2c903003fb181) # "MT25408 ConnectX Mellanox Technologies" lid 17 4xQDR
[30] "H-0002c903003f0f70"[1](2c903003f0f71) # "MT25408 ConnectX Mellanox Technologies" lid 15 4xQDR
[35] "S-248a070300e43740"[35] # "MF0;sw02:MSB7700/U1" lid 1 4xEDR
[36] "S-248a070300e43740"[36] # "MF0;sw02:MSB7700/U1" lid 1 4xEDR

iperf3 如何测试 InfiniBand 组网

iperf3 可以用于测试 InfiniBand 组网的性能和带宽。为此,需要在 InfiniBand 网络中确认 InfiniBand 适配器已启用 IPoIB 功能。IPoIB是一种在InfiniBand网络上传输IP数据的方法,它允许使用标准的TCP/IP协议栈和网络应用程序。在启用IPoIB之前,确保已正确配置InfiniBand适配器和子网管理器(SM)。

需要确认对应的模块有么有加载,没有模块需要重新加载一下

1
2
3
4
5
6
7
root@liruilongs.github.io:~# lsmod | grep ib_ipoib
root@liruilongs.github.io:~# modprobe ib_ipoib
root@liruilongs.github.io:~# lsmod | grep ib_ipoib
ib_ipoib 118784 0
ib_cm 131072 1 ib_ipoib
ib_core 393216 5 ib_ipoib,ib_umad,ib_uverbs,mlx5_ib,ib_cm
root@liruilongs.github.io:~#

iperf3 认知

iperf3 测试 基于 CS 架构,不指定端口时使用默认端口

服务端配置,此命令将在默认的TCP端口5201上启动iperf3服务器,并等待客户端连接请求。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@toolbox ~]# iperf3 -s
-----------------------------------------------------------
Server listening on 5201 (test #1)
-----------------------------------------------------------
Accepted connection from 192.168.26.2, port 43292
[ 5] local 192.168.26.1 port 5201 connected to 192.168.26.2 port 43306
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 2.48 GBytes 21.3 Gbits/sec
[ 5] 1.00-2.00 sec 2.58 GBytes 22.2 Gbits/sec
[ 5] 2.00-3.00 sec 2.49 GBytes 21.4 Gbits/sec
[ 5] 3.00-4.00 sec 2.59 GBytes 22.3 Gbits/sec
[ 5] 4.00-5.00 sec 2.51 GBytes 21.5 Gbits/sec
[ 5] 5.00-6.00 sec 2.44 GBytes 20.9 Gbits/sec
[ 5] 6.00-7.00 sec 2.42 GBytes 20.8 Gbits/sec
[ 5] 7.00-8.00 sec 2.56 GBytes 22.0 Gbits/sec
[ 5] 8.00-9.00 sec 2.48 GBytes 21.3 Gbits/sec
[ 5] 9.00-10.00 sec 2.52 GBytes 21.6 Gbits/sec
[ 5] 10.00-10.00 sec 622 KBytes 20.8 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -

客户端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@toolbox ~]#  iperf3  -c 192.168.26.1
Connecting to host 192.168.26.1, port 5201
[ 5] local 192.168.26.6 port 41866 connected to 192.168.26.1 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 2.67 GBytes 23.0 Gbits/sec 3946 401 KBytes
[ 5] 1.00-2.00 sec 2.64 GBytes 22.6 Gbits/sec 4408 263 KBytes
[ 5] 2.00-3.00 sec 2.68 GBytes 23.0 Gbits/sec 4027 428 KBytes
[ 5] 3.00-4.00 sec 2.83 GBytes 24.3 Gbits/sec 3662 381 KBytes
[ 5] 4.00-5.00 sec 2.86 GBytes 24.6 Gbits/sec 3212 414 KBytes
[ 5] 5.00-6.00 sec 2.79 GBytes 24.0 Gbits/sec 4233 372 KBytes
[ 5] 6.00-7.00 sec 2.80 GBytes 24.1 Gbits/sec 4195 428 KBytes
[ 5] 7.00-8.00 sec 2.61 GBytes 22.4 Gbits/sec 4121 465 KBytes
[ 5] 8.00-9.00 sec 2.76 GBytes 23.7 Gbits/sec 4708 519 KBytes
[ 5] 9.00-10.00 sec 2.55 GBytes 21.9 Gbits/sec 4095 445 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 27.2 GBytes 23.4 Gbits/sec 40607 sender
[ 5] 0.00-10.00 sec 27.2 GBytes 23.3 Gbits/sec receiver

iperf Done.
⬢[root@toolbox ~]#

性能测试的输出结果,其中包含了有关测试过程和结果的详细信息。下面是每个字段的含义:

  • ID: 测试流的唯一标识符。
  • Interval: 测试的时间间隔,以秒为单位。
  • Transfer: 在测试过程中传输的总字节数。
  • Bitrate: 传输速率,以比特每秒(bps)为单位。
  • Retr: 在测试期间发生的重传次数。
  • Sender: 表示此行所列出的结果来自iperf3客户端。
  • Receiver: 表示此行所列出的结果来自iperf3服务器。

从该输出结果可以看出,这次iperf3测试使用TCP协议,在10秒的测试时间内,数据传输量为27.2 GB,传输速率为 23.4Gbps。重传次数为40607次。

给 IB 网卡 配置IP,查看当前IP信息

1
2
3
4
5
6
7
8
root@liruilongs.github.io:~# ip a
...................................
7: ibs106f0: <BROADCAST,MULTICAST> mtu 4092 qdisc noop state DOWN group default qlen 256
link/infiniband 00:00:10:87:fe:80:00:00:00:00:00:00:7c:fe:90:03:00:29:22:7a brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff
altname ibp177s0f0
8: ibs106f1: <BROADCAST,MULTICAST> mtu 4092 qdisc noop state DOWN group default qlen 256
link/infiniband 00:00:18:87:fe:80:00:00:00:00:00:00:7c:fe:90:03:00:29:22:7b brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff
altname ibp177s0f1

给IB卡配置IP

1
2
root@liruilongs.github.io:~# ip address add 10.5.200.177/24 dev ibs106f0
root@liruilongs.github.io:~# ip link set ibs106f0 up

确认配置

1
2
3
4
5
6
7
8
9
10
11
12
root@liruilongs.github.io:~# ip a
................................................
7: ibs106f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2044 qdisc mq state UP group default qlen 256
link/infiniband 00:00:10:87:fe:80:00:00:00:00:00:00:7c:fe:90:03:00:29:22:7a brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff
altname ibp177s0f0
inet 10.5.200.177/24 scope global ibs106f0
valid_lft forever preferred_lft forever
inet6 fe80::7efe:9003:29:227a/64 scope link tentative
valid_lft forever preferred_lft forever
8: ibs106f1: <BROADCAST,MULTICAST> mtu 4092 qdisc noop state DOWN group default qlen 256
link/infiniband 00:00:18:87:fe:80:00:00:00:00:00:00:7c:fe:90:03:00:29:22:7b brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff
altname ibp177s0f1

做 ping 测试

1
2
3
4
5
6
7
8
root@liruilongs.github.io:~# ping 10.5.200.177
PING 10.5.200.177 (10.5.200.177) 56(84) bytes of data.
64 bytes from 10.5.200.177: icmp_seq=1 ttl=64 time=0.027 ms
64 bytes from 10.5.200.177: icmp_seq=2 ttl=64 time=0.017 ms
^C
--- 10.5.200.177 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1031ms
rtt min/avg/max/mdev = 0.017/0.022/0.027/0.005 ms

ping 局域网IP 测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
root@liruilongs.github.io:~# ping 10.5.200.200
PING 10.5.200.200 (10.5.200.200) 56(84) bytes of data.
64 bytes from 10.5.200.200: icmp_seq=1 ttl=64 time=0.319 ms
64 bytes from 10.5.200.200: icmp_seq=2 ttl=64 time=0.281 ms
^C
--- 10.5.200.200 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1011ms
rtt min/avg/max/mdev = 0.281/0.300/0.319/0.019 ms
root@liruilongs.github.io:~# ping 10.5.200.200 -i ibs106f0
ping: option argument contains garbage: ibs106f0
ping: this will become fatal error in the future
PING 10.5.200.200 (10.5.200.200) 56(84) bytes of data.
64 bytes from 10.5.200.200: icmp_seq=1 ttl=64 time=0.295 ms
64 bytes from 10.5.200.200: icmp_seq=75 ttl=64 time=0.267 ms
64 bytes from 10.5.200.200: icmp_seq=107 ttl=64 time=0.240 ms
^C
--- 10.5.200.200 ping statistics ---
129 packets transmitted, 13 received, 89.9225% packet loss, time 1839ms
rtt min/avg/max/mdev = 0.177/0.218/0.344/0.050 ms, ipg/ewma 14.370/0.240 ms

确认网络没有问题就可以进行测试,在至少两个节点上运行 iperf3。其中一个节点充当iperf3服务器,而其他节点则充当客户端。

进行 iperf3 测试。一旦客户端与服务器建立连接,iperf3 测试即可开始。在测试过程中,可以使用各种选项和参数来调整测试过程和输出结果,小伙伴可自行查看帮助文档

查看测试结果。测试完成后,iperf3客户端将显示详细的测试结果,包括带宽、吞吐量、延迟和数据包丢失率等信息。可以使用这些信息来评估网络性能和诊断问题。

在 InfiniBand 网络中使用 iperf3 时,建议使用 RDMA 选项(--rdma)以最大限度地利用 InfiniBand 网络的性能和特性。

ib_read_* 如何测试 InfiniBand 组网

带宽测试 ib_send_bw ,在server端执行

1
2
3
4
5
6
7
8
9
10
11
[ibtests]# ib_send_bw -a -c UD -d mlx4_0 -i 1
------------------------------------------------------------------
Send BW Test
Connection type : UD
Inline data is used up to 1 bytes message
local address: LID 0x0b, QPN 0x28004c, PSN 0xfaa100
remote address: LID 0x02, QPN 0x70004b, PSN 0xc14da8
Mtu : 2048
------------------------------------------------------------------
#bytes #iterations BW peak[MB/sec] BW average[MB/sec]
------------------------------------------------------------------
  • -a:这个选项通常用于自动选择最佳的包大小来进行测试。
  • -c UD:指定使用 Unreliable Datagram (UD) 传输类型进行测试。UD 是一种无连接、不可靠的数据报服务,它适用于那些不需要保证数据可靠传输的场景,例如一些高性能计算或大数据处理任务。
  • -d mlx4_0:指定使用 mlx4_0 这个 InfiniBand 设备来进行测试。mlx4_0 是 InfiniBand 设备的名称,通常与特定的硬件适配器相关联。
  • -i 1:这个选项指定了迭代次数,即测试会运行 1 次。

在client端执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[ibtests]# ib_send_bw -a -c UD -d mlx4_0 -i 1 10.10.11.8
------------------------------------------------------------------
Send BW Test
Connection type : UD
Inline data is used up to 1 bytes message
local address: LID 0x02, QPN 0x70004b, PSN 0xc14da8
remote address: LID 0x0b, QPN 0x28004c, PSN 0xfaa100
Mtu : 2048
------------------------------------------------------------------
#bytes #iterations BW peak[MB/sec] BW average[MB/sec]
2 1000 7.51 7.21
4 1000 15.29 14.19
8 1000 30.66 30.45
16 1000 60.33 59.95
32 1000 119.53 113.20
64 1000 233.75 233.16
128 1000 414.95 413.64
256 1000 794.90 698.20
512 1000 1600.46 774.67
1024 1000 2011.81 804.29
2048 1000 2923.29 2919.91
------------------------------------------------------------------

延时测试 ib_send_lat, 在server端执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[ibtests]# ib_send_lat -a -c UD -d mlx4_0 -i 1
------------------------------------------------------------------
Send Latency Test
Inline data is used up to 400 bytes message
Connection type : UD
local address: LID 0x0b QPN 0x2c004c PSN 0xa1be86
remote address: LID 0x02 QPN 0x74004b PSN 0x6ea837
------------------------------------------------------------------
#bytes #iterations t_min[usec] t_max[usec] t_typical[usec]
2 1000 1.41 4.45 1.43
4 1000 1.41 3.84 1.43
8 1000 1.41 2.75 1.43
16 1000 1.41 3.01 1.42
32 1000 1.49 3.92 1.50
64 1000 1.55 3.96 1.57
128 1000 1.70 2.58 1.71
256 1000 2.41 5.73 2.45
512 1000 2.82 4.07 2.90
1024 1000 3.28 4.95 3.31
2048 1000 4.11 11.74 4.14
------------------------------------------------------------------

在client端执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[ibtests]# ib_send_lat -a -c UD -d mlx4_0 -i 2 10.10.11.8
------------------------------------------------------------------
Send Latency Test
Inline data is used up to 400 bytes message
Connection type : UD
local address: LID 0x02 QPN 0x74004b PSN 0x6ea837
remote address: LID 0x0b QPN 0x2c004c PSN 0xa1be86
------------------------------------------------------------------
#bytes #iterations t_min[usec] t_max[usec] t_typical[usec]
2 1000 1.41 9.97 1.43
4 1000 1.38 5.31 1.43
8 1000 1.41 2.78 1.43
16 1000 1.40 4.01 1.42
32 1000 1.49 3.67 1.50
64 1000 1.55 5.20 1.56
128 1000 1.69 3.13 1.71
256 1000 2.40 5.72 2.45
512 1000 2.83 4.13 2.90
1024 1000 3.28 4.95 3.31
2048 1000 4.11 11.68 4.14
------------------------------------------------------------------

博文部分内容参考

© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知


https://www.zhihu.com/question/31960853/answer/329592768

https://blog.csdn.net/zerotoall/article/details/130530748

https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/8/html/configuring_infiniband_and_rdma_networks/index


© 2018-至今 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)

发布于

2024-04-25

更新于

2024-11-22

许可协议

评论
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×